iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
AI & Data

打造數據科學之路:資料分析與機器學習的完整指南系列 第 25

鐵人賽第二十五天~模型參數挑選

  • 分享至 

  • xImage
  •  

~今天要分享的是「模型參數挑選」~

我們在製作機器學習模型時,並不是只有選取合適的方法這麼簡單,還要調整模型的參數讓模型的結果最佳化,這就是模型參數挑選的重要性。

參數又分為模型參數與超參數,這兩者的區別在於模型參數是可以經由觀察資料直接估計的值,可以由數據自行調整,像是權重就是一種模型參數;而超參數則是不易透過觀察資料直接估計,需要自己手動設定和調整,像是學習率就是一種超參數。

想要找到合適的超參數可以透過使用網格搜尋與交叉驗證的方式達成。

  • 網格搜尋(Grid Search):使用不同的組合來找到最佳的超參數設定
    網格搜尋最重要的是需要先定義每個超參數的取值範圍,接著程式會將這些值組合起來訓練模型,並分別計算結果,最後透過比較不同組合的結果來找到最佳的模型設定。

程式碼如下,以尋找隨機森林的最佳超參數為例:

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
	
# 創建一個 RandomForestClassifier 模型
model = RandomForestClassifier()

# 設定超參數的範圍
param_grid = {
    'n_estimators': [5, 8, 10],
    'max_depth': [3, 5, 8, 10]
}

# 使用 GridSearchCV 進行網格搜尋,cv用於設定交叉驗證的次數
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5)

# 輸入訓練資料進行搜尋
grid_search.fit(X_train, y_train)

# 印出最佳超參數
print("Best Parameters: ", grid_search.best_params_)

# 印出最佳模型
best_model = grid_search.best_estimator_
print("Best Model: ", best_model)

# 使用最佳模型進行預測
y_pred = best_model.predict(X_test)
  • 交叉驗證(Cross-Validation):使用交叉驗證來評估模型以避免過擬合
    最常見的方式為k 摺交叉驗證(k-fold),也就是將資料分成k個,其中一個做驗證集,剩下的k-1個做訓練集,然後做交叉驗證,每輪使用的驗證集跟訓練集會輪流,就這樣重複做k次。
    程式碼如下:
from sklearn.model_selection import KFold
kf = KFold(n_splits=k, shuffle=True, random_state=42) #k為k摺交叉驗證的k
for i, (train_index, test_index) in enumerate(kf.split(X)): #X為欲分析資料的自變數
print(f"Fold {i}:")
print(f" Train: index={train_index}")
print(f" Test: index={test_index}")

留一法(Leave-One-Out)也是一種交叉驗證方法,與k-fold不同的是,留一法就像它本身的名字一樣,每次只會留下一個樣本做驗證集,其他樣本都會做訓練集,所以總共會重複N(樣本數)次。


上一篇
鐵人賽第二十四天~KNN實作
下一篇
鐵人賽第二十六天~Kmeans介紹
系列文
打造數據科學之路:資料分析與機器學習的完整指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言